<?php

/**
 * Subclass for representing a row from the 'sf_2s3i_guard_user' table.
 *
 *
 *
 * @package plugins.sf2s3iGuardPlugin.lib.model
 */
class GuardUser extends BaseGuardUser
{
  
  public function __toString()
  {
    return $this->getDisplayname();
  }
  
  public function setPasswordBis()
  {

  }

  /**
   * Fonction qui créé un mot de passe hashé en sha1
   * et valeur salt qui complete le hash à partir d'un mot
   * de passe en clair
   *
   * @param string $v
   * @author bozec
   */
  public function setPassword($v)
  {
    $salt = md5(rand(100000, 999999).$this->getLogin());
    $this->setSalt($salt);
    $this->setSha1Password(sha1($salt.$v));
  }

  /**
   * fonction qui retourne le md5 de la chaine generé
   * par generate_password
   *
   * @author bozec
   */
  public static function generate_random_key()
  {

    return md5(self::generate_password());
  }

  /**
   * fonction qui retourne une chaine de caractères aléatoires
   * en vue d'initialiser un mot de passe.
   *
   * @return string chaine aléatoire
   * @author bozec
   */
  public static function generate_password()
  {
    $pwd = array();
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $chars2 = '$!@';

    foreach (range(0,8) as $i) {
      $pwd[] = $chars[rand(0,strlen($chars)-1)];
    }

    $pos1 = array_rand(array(0,1,2,3));
    $pos2 = array_rand(array(4,5,6,7));
    $pwd[$pos1] = $chars2[rand(0,strlen($chars2)-1)];
    $pwd[$pos2] = $chars2[rand(0,strlen($chars2)-1)];

    return implode('',$pwd);
  }

  /**
   * fonction qui retourne les credentials d'un utilisateur
   * sous la forme d'un tableau
   *
   * @return strong tableau de credentials
   * @author bozec
   */
  public function getCredentials($separator = ', ')
  {
    $c = new Criteria();
    $c->addJoin(GuardPermissionPeer::ID, GuardUserPermissionPeer::PERMISSION_ID);
    $c->add(GuardUserPermissionPeer::USER_ID, $this->getId());
    $perms = GuardPermissionPeer::doSelect($c);

    $a = array();
    foreach ($perms as $perm)
    {
      array_push($a, $perm->getName());
    }
    return $a;
  }

  /**
   * fonction qui initialise un nouveau token pour
   * un utilisateur. Sert pour la réinitialisation d'un mot
   * de passe
   *
   * @author bozec
   */
  public function setGenerateToken()
  {
    $v = self::generate_random_key();
    $this->setToken($v);
  }


}
